/**
  ******************************************************************************
  * @file    fsm_event_queue.h
  * @author  ashuai0110
  * @version V2.4
  * @date    2024-09-10
  * @brief   有限状态机的事件队列
  *
  ******************************************************************************
  * @attention
  *
  * 版权声明:内容为编者(ashuai0110)原创,使用请注明出处,当然,你也可以不这样做^_^
  * 出处链接:https://gitee.com/ashuai0110/mcu_reuse_development_module.git
  *
  ******************************************************************************
  */

#ifndef __FSM_EVENT_QUEUE_H
#define __FSM_EVENT_QUEUE_H

#ifdef __cplusplus
extern "C" {
#endif

/* 包含头文件-----------------------------------------------------------------*/
#include "fsm_event_processor.h"

/**
 * @addtogroup state_machine
 * @{
 */

/**
 * @addtogroup fsm_event_queue
 * @{
 */

/* 宏定义---------------------------------------------------------------------*/

/* 类型定义-------------------------------------------------------------------*/
/**
 * @defgroup fsm_event_queue_global_types fsm event queue global types
 * @{
 */

/**
  * @brief  FSM事件队列 structrue definition
  */
typedef struct fsm_eq {
    char *eventBuf;   /*!< 事件队列缓冲区 */
    uint32_t bufLen;  /*!< 缓冲区长度byte */
    uint32_t wrIndex; /*!< 写索引 */
    uint32_t rdIndex; /*!< 读索引 */
    uint8_t rwFlag;   /*!< 读写记录标志 0:读过 1:写过 */
} fsm_eq_t;

/**
 * @}
 */

/* 全局变量-------------------------------------------------------------------*/

/* 函数原型-------------------------------------------------------------------*/
/**
 * @addtogroup fsm_event_queue_global_functions
 * @{
 */

void fsm_eq_init(fsm_eq_t *_fsmEq, void *buf, uint32_t bufLen);

uint8_t fsm_eq_read(fsm_eq_t *_fsmEq, fsm_event_t *event, uint32_t rdLen);

uint8_t fsm_eq_write(fsm_eq_t *_fsmEq, fsm_event_t *event, uint32_t wrLen);

/**
 * @}
 */

/**
 * @}
 */

/**
 * @}
 */

#ifdef __cplusplus
}
#endif

#endif /* fsm_event_queue.h */
